package com.wjm.list;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
 * Data:2022年07月06日
 * Author:wjm
 * Content: List接口的实现类ArrayList
 *
 *  重点是要学List下的LinkedList实现类和ArrayList实现类
 *
 *  List是Collection下的一个子接口
 *  特点：
 *          1）有序的集合
 *          2）有索引
 *          3）可以存放重复元素
 *
 *  常用方法：
 *          public void add(int index, E element):将元素添加到集合的指定位置上
 *          public E get(int index):返回集合中指定位置的元素
 *          public E remove(int index):移除指定位置的元素，返回被移除的元素
 *          public E set(int index,E element):用指定的元素替换指定位置的元素，返回被替换的元素
 *          public abstract List<E> subList(int fromIndex,int toIndex):截取原集合中指定位置间的子集合
 *
 *          subList的注意点：
 *                  1）含尾不含头
 *                  2）对截取的子集合做任何操作都会影响原集合的数据内容
 *
 *
 */
public class ListDemo {
    public static void main(String[] args) {
        List<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        list.add(5);
        list.add(6);
        list.add(7);
        list.add(8);
        System.out.println(list);
        System.out.println("-------------------------");

        list.add(1,9);
        System.out.println(list);
        System.out.println("-------------------------");

        Integer a = list.remove(2);
        System.out.println("移除"+a);
        System.out.println(list);
        System.out.println("--------------------------");;

        Integer b  = list.set(1,2);
        System.out.println("被替换"+b);
        System.out.println(list);


        System.out.println("---------第一种遍历集合的方式---------");
        for (int i=0;i<list.size();i++){
            System.out.println(list.get(i));
        }

        System.out.println("---------第二种遍历集合的方式---------");
        //创建构造器对象
        Iterator<Integer> iterator = list.iterator();
        while (iterator.hasNext()){
            Integer i = iterator.next();
            System.out.println(i);
        }

        System.out.println("---------第三种遍历集合的方式---------");
        for (Integer i : list){
            System.out.println(i);
        }

        System.out.println("------------------------------------");
        List<Integer> list1 = list.subList(1,5);
        System.out.println("这是截取的子集合"+list1);
        System.out.println("这是原集合"+list);
        //对子集数据全部加10
        for (int i =0;i<list1.size();i++){
            Integer aa = list1.get(i)+10;
            list1.set(i , aa);
        }
        System.out.println("这是经过操作的子集合"+list1);
        System.out.println("这是原集合"+list);

    }
}
